package de.hdu.tennis.dao;

import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import de.hdu.tennis.model.Mitglied;
import de.hdu.tennis.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.MessagingException;

/**
 * Data Access Object for Mitglied
 * @author Lilli Kardapolzew, Katharina Weber, Carolina Hirtreiter
 *
 */
public class MitgliedDao extends HibernateDaoSupport {
	/**
	 * return Mitglied by primey key: id
	 * @param id is the object which will be saved into database
	 * @return the object specified by the parameter
	 */

	public Mitglied findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Mitglied) template.get(Mitglied.class, id);
	}
	
	/**
	 * Returns Mitglied at Logib by email
	 * @param email
	 * @return Mitglied
	 */

	public Mitglied findByLogin(String email) {
		HibernateTemplate template = getHibernateTemplate();
		@SuppressWarnings("unchecked")
		List<Mitglied> mitglied = template
				.find("from Mitglied mit where mit.email = '" + email + "'");
		if (mitglied.isEmpty()) {
			return null;
		} else {
			return (Mitglied) template.get(Mitglied.class, mitglied.get(0)
					.getId());
		}
	}
	
	/**
	 * Save or Update Mitglied
	 * @param mitglied
	 * @return
	 * @throws AddressException
	 * @throws MessagingException
	 */

	public Mitglied save(Mitglied mitglied) throws AddressException,
			MessagingException {
		HibernateTemplate template = getHibernateTemplate();
		template.saveOrUpdate(mitglied);

		String recipient = mitglied.getEmail();
		String subject = "Registrierungsbestätigung TennisHDU";
		String newline = System.getProperty("line.separator");
		String Begtext = "Vielen Dank für Ihre Registrierung! "
				+ newline
				+ "Sie wurden bei uns als neues Mitglied, mit folgenden Daten, eingetragen ";
		String Nachname = "Nachname: " + mitglied.getNachname();
		String Vorname = "Vorname: " + mitglied.getVorname();
		String Straße = "Strasse: " + mitglied.getStrasse();
		String PLZ = "PLZ: " + mitglied.getPlz();
		String Ort = "Ort: " + mitglied.getOrt();
		String Pwd = "Ihr Passwort lautet: " + mitglied.getPasswort() + newline;

		String text = Begtext + newline + newline + Nachname + newline
				+ Vorname + newline + Straße + newline + PLZ + newline + Ort
				+ newline + Pwd;

		/**
		 * Method to send a E-Mail 
		 * Exception e.g. UnknownHostException we be catched global 
		 */
		try {
			Mail.send(MailAccounts.GOOGLEMAIL, recipient, subject, text);
		} catch (Exception e) {

		}
		return mitglied;
	}
	
	
	/**
	 * lists all Mitglied
	 * @return all Mitglied objects from the database.
	 */

	public List<Mitglied> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		return template.loadAll(Mitglied.class);
	}

}
